for 、for-in 和 forEach

数组

在迭代数组时,相比 for-in 循环, forEachfor 循环更具优势。

不推荐:

  1. myArray = ['a', 1, 'etc'];
  2. for (var indexNum in myArray) {
  3. console.log(myArray[indexNum]);
  4. }
  5. var starWars = {
  6. "creatures": [
  7. {
  8. "name": "bantha",
  9. "face": "furry"
  10. },
  11. {
  12. "name": "loth-cat",
  13. "face": "toothy"
  14. }
  15. ]
  16. };
  17. for (var i in starWars.creatures) {
  18. console.log(starWars.creatures[i].name);
  19. console.log(starWars.creatures[i].face);
  20. };

推荐:

  1. mySimpleArray = ['a', 1, 'etc'];
  2. mySimpleArray.forEach(function(val) {
  3. console.log(val);
  4. });
  5. var starWars = {
  6. "creatures": [
  7. {
  8. "name": "bantha",
  9. "face": "furry"
  10. },
  11. {
  12. "name": "loth-cat",
  13. "face": "toothy"
  14. }
  15. ]
  16. };
  17. starWars.creatures.forEach(function(creature){
  18. console.log(creature.name);
  19. console.log(creature.face)
  20. });
  21. // 或者
  22. myArray = ['a', 1, 'etc'];
  23. for (var indexCount = 0; indexCount < myArray.length; indexCount++) {
  24. console.log(myArray[indexCount]);
  25. };

对象

for-in 循环用于在对象中循环关键词。这样很容易出错,因为, for-in 不会从 0 循环,而是循环对象及其原型链中现存的所有关键词。
如果可以的话,对数据进行整理,以避免迭代对象。如果不可行,将 for-in 循环的内容包裹在条件语句中,以避免迭代原型链。

不推荐:

  1. myObj = {'firstName':'Ada','secondName':'Lovelace'};
  2. for (var key in myObj) {
  3. console.log(myObj[key]);
  4. }

推荐:

  1. myObj = {'firstName':'Ada','lastName':'Lovelace'};
  2. for (var key in myObj) {
  3. if (myObj.hasOwnProperty(key)) {
  4. console.log(myObj[key]);
  5. }
  6. }

多行字符串字面量

不要使用。
编译期间无法妥善删除各行开头的空格,斜杠后的空白会引发棘手的问题,虽然大部分脚本引擎支持该操作,但这并不属于规格中的一部分。

不推荐:

  1. var myPoetry = '一二三四五,\
  2. 上山打老虎,\
  3. 老虎没打到,\
  4. 打到小松鼠,\
  5. 让我数一数,\
  6. 一二三四五';

推荐:

  1. var myPoetry = '黄河远上白云间,' +
  2. '一片孤城万仞山。' +
  3. '羌笛何须怨杨柳,' +
  4. '春风不度玉门关。';

数组和对象字面量

使用数组和对象字面量,而不是数组和对象构造函数。

不推荐:

  1. var myArray = new Array(x1, x2, x3);
  2. var myObject = new Object();
  3. myObject.a = 0;

推荐:

  1. var myArray = [x1, x2, x3];
  2. var myObject = {
  3. a: 0
  4. };